package com.atguigu.gulimall.test.controller;

import com.atguigu.gulimall.test.redis.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

@RestController
public class IndexController {

    @Autowired
    private RedisService redisService;
    
//    @Autowired
//    private Redisson redisson;

    private String lockKey = "lock1";
    /**
     * 模拟订单超卖
     * @return
     */
//    @RequestMapping("index")
//    public void index(){
//        sale();
//    }
//
//    public void sale(){
//        //  判断该线程是否拥有锁，给key加上过期时间，避免程序宕机了，锁没有释放掉,30秒钟
//        boolean setnx = redisService.setnx(lockKey, "true",30L);
//        while (!setnx){
//            sale();
//        }
//        Integer inventoryInt = (Integer)redisService.get("test:inventory:");
//        if(inventoryInt<=0){
//            String str = "库存不足";
//            System.out.println(str);
//            unLock();
//            return;
//        }else{
//            try{
//                Integer remaind = inventoryInt-1;
//                String str = "当前库存："+inventoryInt+",扣除1个后剩下："+ remaind;
//                System.out.println(str);
//                redisService.set("test:inventory:",remaind);
//            }catch (Exception e){
//                e.printStackTrace();
//            }finally {
//                // 如果抛异常了，锁必须要释放掉,解决因为异常导致死锁的问题
//                unLock();
//            }
//        }
//    }
//
//    public void unLock(){
//        redisService.del(lockKey);
//    }
//
//    /**
//     * 出售
//     */
//    public String sell(){
//        String lock = "lock:product:001";
//        String clientId = UUID.randomUUID().toString();
//        RLock redissonLock = redisson.getLock(lock);
//        redissonLock.lock();
//        Integer inventoryInt = (Integer)redisService.get("test:inventory:");
//        if(inventoryInt<=0){
//            System.out.println( "库存不足");
//        }else{
//            try{
//                Integer remaind = inventoryInt-1;
//                String str = "当前库存："+inventoryInt+",扣除1个后剩下："+ remaind;
//                System.out.println(str);
//                redisService.set("test:inventory:",remaind);
//            }catch (Exception e){
//                e.printStackTrace();
//            }finally {
//                redissonLock.unlock();
//            }
//        }
//        return "";
//    }
}
